/*******************************************************
 * Title: Config.java 
 * Description: 
 * 
 * Copyright 2009. silverduner.com. 
 * All rights reserved.
 *******************************************************/
package com.silverduner.config;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.List;
import java.util.Map;
import java.util.Properties;

/**
 * @author Yuwen Sun
 * @version 
 */
public interface Config {

	// interface from apache common configuration
	
    boolean isEmpty();

    boolean containsKey(String key);

    Properties getProperties(String key);

    boolean getBoolean(String key);
    boolean getBoolean(String key, boolean defaultValue);
    Boolean getBoolean(String key, Boolean defaultValue);

    byte getByte(String key);
    byte getByte(String key, byte defaultValue);
    Byte getByte(String key, Byte defaultValue);

    double getDouble(String key);
    double getDouble(String key, double defaultValue);
    Double getDouble(String key, Double defaultValue);

    float getFloat(String key);
    float getFloat(String key, float defaultValue);
    Float getFloat(String key, Float defaultValue);

    int getInt(String key);
    int getInt(String key, int defaultValue);
    Integer getInteger(String key, Integer defaultValue);

    long getLong(String key);
    long getLong(String key, long defaultValue);
    Long getLong(String key, Long defaultValue);

    short getShort(String key);
    short getShort(String key, short defaultValue);
    Short getShort(String key, Short defaultValue);

    BigDecimal getBigDecimal(String key);
    BigDecimal getBigDecimal(String key, BigDecimal defaultValue);
    
    BigInteger getBigInteger(String key);
    BigInteger getBigInteger(String key, BigInteger defaultValue);

    String getString(String key);
    String getString(String key, String defaultValue);

    String[] getStringArray(String key);

    @SuppressWarnings("unchecked")
	List getList(String key);
    @SuppressWarnings("unchecked")
	List getList(String key, List defaultValue);
    
    // customized interface
    Config subConfig(String key);
    Map<String,Config> subConfigMap(String idKey, String key);
}
